// pages/pay/coupon-list/index.js
const api = require('../../../utils/api.js');
const auth = require('../../../utils/auth.js');

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		statusBarHeight: 44, // 系统状态栏高度
		currentTab: 0, // 当前选中的Tab索引：0-未使用，1-已使用，2-已过期，3-已失效
		tabList: ['未使用', '已使用', '已过期', '已失效'],
		couponList: [], // 优惠券列表
		filteredCouponList: [], // 筛选后的优惠券列表
		loading: false, // 加载状态
		hasMore: true, // 是否还有更多数据
		page: 1, // 当前页码
		size: 20, // 每页数量
		// 模拟优惠券数据
		mockCoupons: [
			// 未使用状态的优惠券 (status: 0)
			{
				id: 1,
				title: '2元满减券',
				issueTime: '2025-03-16',
				validTime: '2025.03.16-2025.06.16',
				amount: 2,
				condition: '满10元可用',
				scene: '购买产品',
				status: 0,
				rules: '1. 本券仅限购买产品时使用\n2. 订单金额满10元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 2,
				title: '8元满减券',
				issueTime: '2025-03-18',
				validTime: '2025.03.18-2025.06.18',
				amount: 8,
				condition: '满40元可用',
				scene: '购买产品',
				status: 0,
				rules: '1. 本券仅限购买产品时使用\n2. 订单金额满40元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 3,
				title: '15元满减券',
				issueTime: '2025-03-20',
				validTime: '2025.03.20-2025.06.20',
				amount: 15,
				condition: '满80元可用',
				scene: '宠物美容',
				status: 0,
				rules: '1. 本券仅限宠物美容服务使用\n2. 订单金额满80元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 4,
				title: '20元新人券',
				issueTime: '2025-03-21',
				validTime: '2025.03.21-2025.12.21',
				amount: 20,
				condition: '满100元可用',
				scene: '全场通用',
				status: 0,
				rules: '1. 本券为新人专享优惠券\n2. 订单金额满100元可用\n3. 仅限首次消费使用\n4. 过期自动失效'
			},
			
			// 已使用状态的优惠券 (status: 1)
			{
				id: 5,
				title: '5元满减券',
				issueTime: '2025-03-10',
				validTime: '2025.03.10-2025.06.10',
				amount: 5,
				condition: '满30元可用',
				scene: '购买产品',
				status: 1,
				rules: '1. 本券仅限购买产品时使用\n2. 订单金额满30元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 6,
				title: '12元美容券',
				issueTime: '2025-03-05',
				validTime: '2025.03.05-2025.06.05',
				amount: 12,
				condition: '满60元可用',
				scene: '宠物美容',
				status: 1,
				rules: '1. 本券仅限宠物美容服务使用\n2. 订单金额满60元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 7,
				title: '25元寄养券',
				issueTime: '2025-02-28',
				validTime: '2025.02.28-2025.05.28',
				amount: 25,
				condition: '满150元可用',
				scene: '宠物寄养',
				status: 1,
				rules: '1. 本券仅限宠物寄养服务使用\n2. 订单金额满150元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			
			// 已过期状态的优惠券 (status: 2)
			{
				id: 8,
				title: '10元满减券',
				issueTime: '2025-02-15',
				validTime: '2025.02.15-2025.03.15',
				amount: 10,
				condition: '满50元可用',
				scene: '购买产品',
				status: 2,
				rules: '1. 本券仅限购买产品时使用\n2. 订单金额满50元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 9,
				title: '6元洗护券',
				issueTime: '2025-01-10',
				validTime: '2025.01.10-2025.03.10',
				amount: 6,
				condition: '满35元可用',
				scene: '宠物洗护',
				status: 2,
				rules: '1. 本券仅限宠物洗护服务使用\n2. 订单金额满35元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 10,
				title: '18元体验券',
				issueTime: '2024-12-20',
				validTime: '2024.12.20-2025.03.20',
				amount: 18,
				condition: '满88元可用',
				scene: '全场通用',
				status: 2,
				rules: '1. 本券为体验优惠券\n2. 订单金额满88元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			
			// 已失效状态的优惠券 (status: 3)
			{
				id: 11,
				title: '3元满减券',
				issueTime: '2025-01-20',
				validTime: '2025.01.20-2025.02.20',
				amount: 3,
				condition: '满20元可用',
				scene: '购买产品',
				status: 3,
				rules: '1. 本券仅限购买产品时使用\n2. 订单金额满20元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 12,
				title: '30元VIP券',
				issueTime: '2024-11-15',
				validTime: '2024.11.15-2025.02.15',
				amount: 30,
				condition: '满200元可用',
				scene: '全场通用',
				status: 3,
				rules: '1. 本券为VIP专享优惠券\n2. 订单金额满200元可用\n3. 不可与其他优惠同时使用\n4. 过期自动失效'
			},
			{
				id: 13,
				title: '7元节日券',
				issueTime: '2024-12-25',
				validTime: '2024.12.25-2025.01.25',
				amount: 7,
				condition: '满45元可用',
				scene: '节日活动',
				status: 3,
				rules: '1. 本券为节日活动优惠券\n2. 订单金额满45元可用\n3. 仅限节日期间使用\n4. 过期自动失效'
			}
		]
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		// 获取系统信息
		this.getSystemInfo();
		// 检查登录状态并加载数据
		this.checkLoginAndLoadData();
	},

	/**
	 * 获取系统信息
	 */
	getSystemInfo() {
		const systemInfo = wx.getSystemInfoSync();
		this.setData({
			statusBarHeight: systemInfo.statusBarHeight || 44
		});
	},

	/**
	 * 检查登录状态并加载数据
	 */
	async checkLoginAndLoadData() {
		if (!auth.checkLoginStatus()) {
			// 未登录，显示提示并跳转到登录页
			wx.showModal({
				title: '请先登录',
				content: '查看优惠券需要先登录账号',
				confirmText: '去登录',
				cancelText: '返回',
				success: (res) => {
					if (res.confirm) {
						auth.requireLogin('/pages/pay/coupon-list/index');
					} else {
						wx.navigateBack({
							delta: 1,
							fail: () => {
								wx.switchTab({
									url: '/pages/home/index/index'
								});
							}
						});
					}
				}
			});
			return;
		}
		
		// 已登录，加载优惠券数据
		await this.loadCouponData();
	},

	/**
	 * 加载优惠券数据
	 */
	async loadCouponData(refresh = true) {
		if (this.data.loading) return;
		
		try {
			this.setData({ loading: true });
			
			// 如果是刷新，重置页码
			if (refresh) {
				this.setData({
					page: 1,
					couponList: [],
					hasMore: true
				});
			}
			
			// 获取当前Tab对应的状态值（API中：1-未使用，2-已使用，3-已过期）
			const statusMap = [1, 2, 3, 3]; // 页面Tab索引映射到API状态值
			const status = statusMap[this.data.currentTab];
			
			const result = await api.getUserCoupons(status, this.data.page, this.data.size);
			console.log('获取优惠券列表结果:', result);
			
			// api.js返回格式：{success: boolean, data: object, message: string}
			if (result && result.success && result.data) {
				const newCoupons = result.data.list || [];
				const totalCount = result.data.total || 0;
				
				// 转换数据格式以适配页面显示
				const formattedCoupons = newCoupons.map(coupon => ({
					id: coupon._id,
					title: coupon.couponName || '优惠券',
					issueTime: this.formatDate(coupon.createTime),
					validTime: `${this.formatDate(coupon.createTime)}-${this.formatDate(coupon.expireTime)}`,
					amount: coupon.discountAmount ? (coupon.discountAmount / 100) : 0,
					condition: coupon.minAmount ? `满${(coupon.minAmount / 100).toFixed(0)}元可用` : '无门槛',
					scene: coupon.storeId ? '指定门店' : '全场通用',
					status: this.data.currentTab, // 使用页面Tab索引作为状态
					rules: this.generateCouponRules(coupon),
					originalData: coupon // 保存原始数据
				}));
				
				const updatedList = refresh ? formattedCoupons : [...this.data.couponList, ...formattedCoupons];
				
				this.setData({
					couponList: updatedList,
					filteredCouponList: updatedList,
					hasMore: updatedList.length < totalCount,
					page: this.data.page + 1
				});
			} else {
				console.error('获取优惠券列表失败:', result);
				if (refresh) {
					// 首次加载失败，显示空状态
					this.setData({
						couponList: [],
						filteredCouponList: []
					});
				}
				
				wx.showToast({
					title: result?.message || '获取优惠券失败',
					icon: 'none',
					duration: 2000
				});
			}
		} catch (error) {
			console.error('加载优惠券数据失败:', error);
			
			if (refresh) {
				// 网络错误时显示模拟数据作为降级处理
				this.setData({
					couponList: this.data.mockCoupons,
					filteredCouponList: this.data.mockCoupons.filter(coupon => coupon.status === this.data.currentTab)
				});
				
				wx.showToast({
					title: '网络异常，显示模拟数据',
					icon: 'none',
					duration: 2000
				});
			}
		} finally {
			this.setData({ loading: false });
		}
	},

	/**
	 * 格式化时间戳为日期字符串
	 */
	formatDate(timestamp) {
		if (!timestamp) return '';
		const date = new Date(timestamp * 1000);
		const year = date.getFullYear();
		const month = String(date.getMonth() + 1).padStart(2, '0');
		const day = String(date.getDate()).padStart(2, '0');
		return `${year}.${month}.${day}`;
	},

	/**
	 * 生成优惠券使用规则
	 */
	generateCouponRules(coupon) {
		let rules = [];
		
		if (coupon.storeId) {
			rules.push('本券仅限指定门店使用');
		} else {
			rules.push('本券全场通用');
		}
		
		if (coupon.minAmount) {
			rules.push(`订单金额满${(coupon.minAmount / 100).toFixed(0)}元可用`);
		} else {
			rules.push('无最低消费限制');
		}
		
		rules.push('不可与其他优惠同时使用');
		rules.push('过期自动失效');
		
		return rules.join('\n');
	},

	/**
	 * 返回上一页
	 */
	onBack() {
		wx.navigateBack({
			delta: 1,
			success: () => {
				console.log('返回上一页成功');
			},
			fail: (error) => {
				console.error('返回上一页失败:', error);
				// 降级处理：跳转到首页
				wx.switchTab({
					url: '/pages/home/index/index'
				});
			}
		});
	},

	/**
	 * 切换Tab
	 */
	async switchTab(e) {
		const tabIndex = e.currentTarget.dataset.index;
		if (tabIndex === this.data.currentTab) return;
		
		this.setData({
			currentTab: tabIndex
		});
		
		// 重新加载对应状态的优惠券数据
		await this.loadCouponData(true);
	},

	/**
	 * 根据Tab筛选优惠券（已废弃，现在直接从API获取对应状态数据）
	 */
	filterCouponsByTab(tabIndex) {
		// 此方法已废弃，现在通过API直接获取对应状态的数据
		console.log('filterCouponsByTab已废弃，请使用loadCouponData');
	},

	/**
	 * 显示使用规则
	 */
	showRules(e) {
		const couponId = e.currentTarget.dataset.id;
		const coupon = this.data.couponList.find(item => item.id === couponId);
		
		if (coupon) {
			wx.showModal({
				title: '使用规则',
				content: coupon.rules,
				showCancel: false,
				confirmText: '知道了'
			});
		}
	},

	/**
	 * 立即使用优惠券
	 */
	useCoupon(e) {
		const couponId = e.currentTarget.dataset.id;
		const coupon = this.data.couponList.find(item => item.id === couponId);
		
		if (coupon && coupon.status === 0) {
			// 跳转到服务选择页面，携带优惠券ID
			wx.navigateTo({
				url: `/pages/booking/select-service/index?couponId=${couponId}`,
				success: () => {
					console.log('跳转到服务选择页面成功');
				},
				fail: (error) => {
					console.error('跳转失败:', error);
					wx.showToast({
						title: '暂时无法使用，请稍后重试',
						icon: 'none',
						duration: 2000
					});
				}
			});
		} else {
			wx.showToast({
				title: '该优惠券不可使用',
				icon: 'none',
				duration: 2000
			});
		}
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	async onShow() {
		// 清除用户相关缓存，确保个人中心页面能获取最新优惠券数量
		const app = getApp();
		const dataManager = app.getDataManager();
		dataManager.invalidateUserCache();
		console.log('[优惠券列表页面显示] 已清除用户缓存');
		// 验证登录状态
		const isLoggedIn = await auth.validateLoginStatus();
		if (isLoggedIn) {
			// 刷新当前Tab的数据
			await this.loadCouponData(true);
		} else {
			// 登录状态失效，重新检查
			this.checkLoginAndLoadData();
		}
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	async onPullDownRefresh() {
		// 重新加载当前Tab的数据
		await this.loadCouponData(true);
		wx.stopPullDownRefresh();
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	async onReachBottom() {
		// 加载更多数据
		if (this.data.hasMore && !this.data.loading) {
			await this.loadCouponData(false);
		}
	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {

	}
})